package com.mhd.do_coupon.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mhd.do_coupon.service.TCouponService;
import com.mhd.do_coupon.service.TUserCouponService;
import com.mhd.entity.TCoupon;
import com.mhd.entity.TUserCoupon;
import com.mhd.utils.Constants;
import com.mhd.utils.ResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
@Api(tags = "优惠券管理模块")
@RequestMapping("/do-coupon")
public class CouponController {

    /**
     * 1. 优惠券发放接口。功能需求
     * (1) 生成一组优惠券（例如，每组100个），
     * 把优惠券的基本信息落库（根据业务需求设计优惠券字段：优惠券ID，金额，使用范围，创建时间，有效期，是否已领取 等等）。
     * (2) 投放优惠券。把生成的100个优惠券投放出去，使用户可以通过调用抢券接口获取优惠券。
     * 设计要求：
     * 该接口属于后台维护接口，可以直接访问mysql。
     * 投放的优惠券写入redis中。
     */

    @Resource
    TCouponService tCouponService;
    @Resource
    TUserCouponService tUserCouponService;
    @Resource
    RedisTemplate redisTemplate;

    @ApiOperation(value = "优惠券类型创建")
    @GetMapping("/do-coupons")
    public ResultVo doCoupons(String sum, String scope,Date date) {

        //先根据参数创建优惠券类型

        TCoupon tCoupon = new TCoupon();
        tCoupon.setSum(sum);
        tCoupon.setCreateTime(new Date());
        tCoupon.setScope(scope);
        tCoupon.setTermValidity(date);

        //将优惠券类型存入MySQL Redis
        tCouponService.save(tCoupon);
        redisTemplate.opsForList().rightPush(Constants.COUPONS_LIST, tCoupon);

        return ResultVo.ok();
    }

    @ApiOperation(value = "优惠券类型查询")
    @GetMapping("/get-coupons")
    public ResultVo getCoupons() {

        //查询所优惠券类型
        List<TCoupon> list = redisTemplate.opsForList().range(Constants.COUPONS_LIST, 0, -1);

        return ResultVo.ok(list);
    }
    @ApiOperation(value = "优惠券数量创建")
    @GetMapping("/do-coupon")
    public ResultVo doCoupon(Integer id,Integer count) {
        Date date = new Date();
        //通过传入id 查询优惠券类型  并创建相应数量的优惠券
        TCoupon byId = tCouponService.getById(id);
        ArrayList<TUserCoupon> tUserCoupons = new ArrayList<TUserCoupon>();
        for (Integer i = 0; i < count; i++) {
            TUserCoupon tUserCoupon = new TUserCoupon();
            tUserCoupon.setCreateTime(date);
            tUserCoupon.setCouponId(id);
            tUserCoupons.add(tUserCoupon);
        }
        //将优惠券存入MySQL 和 Redis
        tUserCouponService.saveBatch(tUserCoupons);
        redisTemplate.opsForList().rightPushAll(Constants.COUPON_USER_LIST+tUserCoupons.get(0).getCouponId(),tUserCoupons);
        return ResultVo.ok();
    }
}
